package com.yunke.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yunke.entity.YunkeConfig;
import com.yunke.entity.dto.YunkeConfigDto;
import com.yunke.entity.vo.YunkeConfigVo;

import java.util.List;
import java.util.Map;

/**
 * 系统配置服务接口
 * 
 * @author yunke
 * @since 1.0.0
 */
public interface YunkeConfigService extends IService<YunkeConfig> {

    /**
     * 创建配置
     */
    boolean createConfig(YunkeConfigDto configDto);

    /**
     * 更新配置
     */
    boolean updateConfig(YunkeConfigDto configDto);

    /**
     * 删除配置
     */
    boolean deleteConfig(Long id);

    /**
     * 批量删除配置
     */
    boolean deleteConfigs(List<Long> ids);

    /**
     * 分页查询配置列表
     */
    IPage<YunkeConfigVo> getConfigPage(Integer current, Integer size,
                                      String configCategory, String configGroup,
                                      String configName, Boolean isSystem, Boolean isEnabled);

    /**
     * 根据ID查询配置详情
     */
    YunkeConfigVo getConfigById(Long id);

    /**
     * 根据配置键名查询配置
     */
    YunkeConfigVo getConfigByKey(String configKey);

    /**
     * 根据分类查询配置列表
     */
    List<YunkeConfigVo> getConfigByCategory(String configCategory, Boolean isEnabled);

    /**
     * 根据配置组查询配置列表
     */
    List<YunkeConfigVo> getConfigByGroup(String configGroup, Boolean isEnabled);

    /**
     * 查询系统配置列表
     */
    List<YunkeConfigVo> getSystemConfigs(Boolean isEnabled);

    /**
     * 查询用户可见配置列表
     */
    List<YunkeConfigVo> getUserVisibleConfigs(Boolean isEnabled);

    /**
     * 查询配置分类列表
     */
    List<String> getConfigCategories();

    /**
     * 查询配置组列表
     */
    List<String> getConfigGroups(String configCategory);

    /**
     * 启用配置
     */
    boolean enableConfig(Long id);

    /**
     * 禁用配置
     */
    boolean disableConfig(Long id);

    /**
     * 批量更新配置状态
     */
    boolean updateConfigStatus(List<Long> ids, Integer status);

    /**
     * 获取配置值
     */
    String getConfigValue(String configKey);

    /**
     * 获取配置值（带默认值）
     */
    String getConfigValue(String configKey, String defaultValue);

    /**
     * 更新配置值
     */
    boolean updateConfigValue(String configKey, String configValue);

    /**
     * 批量更新配置值
     */
    boolean updateConfigValues(Map<String, String> configMap);

    /**
     * 重置配置为默认值
     */
    boolean resetConfigToDefault(String configKey);

    /**
     * 导出配置
     */
    List<YunkeConfigVo> exportConfigs(String configCategory, Boolean isSystem);

    /**
     * 导入配置
     */
    boolean importConfigs(List<YunkeConfigDto> configList);

    /**
     * 验证配置值
     */
    boolean validateConfigValue(String configKey, String configValue);

    /**
     * 统计配置数量
     */
    long countConfigs(String configCategory, Boolean isSystem, Boolean isEnabled);
} 